package org.example.managere.service.feibiao;

import org.example.managere.dto.feibiao.AmKnowledgeBasicDto;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;

/**
 * 电机基础知识服务接口 - 电机向量知识库
 */
public interface AmKnowledgeBasicService {
    
    /**
     * 保存电机基础知识
     * @param dto 电机基础知识DTO
     * @return 保存后的电机基础知识DTO
     */
    AmKnowledgeBasicDto save(AmKnowledgeBasicDto dto);
    
    /**
     * 根据ID查找电机基础知识
     * @param motorId 电机ID
     * @return 可能包含电机基础知识的Optional
     */
    Optional<AmKnowledgeBasicDto> findById(String motorId);
    
    /**
     * 更新电机基础知识
     * @param dto 电机基础知识DTO
     * @return 更新后的电机基础知识DTO
     */
    AmKnowledgeBasicDto update(AmKnowledgeBasicDto dto);
    
    /**
     * 删除电机基础知识
     * @param motorId 电机ID
     */
    void deleteById(String motorId);
    
    /**
     * 查找所有电机基础知识
     * @return 电机基础知识DTO列表
     */
    List<AmKnowledgeBasicDto> findAll();
    
    /**
     * 分页查询电机基础知识
     * @param pageable 分页参数
     * @return 电机基础知识DTO分页结果
     */
    Page<AmKnowledgeBasicDto> findAll(Pageable pageable);
    
    /**
     * 根据关键字搜索电机基础知识
     * @param keyword 关键字
     * @param pageable 分页参数
     * @return 电机基础知识DTO分页结果
     */
    Page<AmKnowledgeBasicDto> searchByKeyword(String keyword, Pageable pageable);
    
    /**
     * 根据电机型号查询电机基础知识
     * @param motorType 电机型号
     * @return 电机基础知识DTO列表
     */
    List<AmKnowledgeBasicDto> findByMotorType(String motorType);
    
    /**
     * 根据电机型号精确查询
     * @param motorType 电机型号
     * @return 电机基础知识DTO
     */
    Optional<AmKnowledgeBasicDto> findExactByMotorType(String motorType);
    
    /**
     * 根据制造商查询电机基础知识
     * @param manufacturer 制造商
     * @return 电机基础知识DTO列表
     */
    List<AmKnowledgeBasicDto> findByManufacturer(String manufacturer);
    
    /**
     * 根据额定功率范围查询
     * @param minPower 最小功率
     * @param maxPower 最大功率
     * @return 电机基础知识DTO列表
     */
    List<AmKnowledgeBasicDto> findByRatedPowerRange(BigDecimal minPower, BigDecimal maxPower);
    
    /**
     * 根据额定电压范围查询
     * @param minVoltage 最小电压
     * @param maxVoltage 最大电压
     * @return 电机基础知识DTO列表
     */
    List<AmKnowledgeBasicDto> findByRatedVoltageRange(BigDecimal minVoltage, BigDecimal maxVoltage);
    
    /**
     * 统计某个生产厂商的电机数量
     * @param manufacturer 制造商
     * @return 电机数量
     */
    long countByManufacturer(String manufacturer);
} 